package com.michale.system.service;

import com.michale.common.domain.operate.UserOnlineEntity;
import com.michale.common.domain.security.LoginUserDetail;
import io.swagger.annotations.Api;

import java.util.List;

/**
 * @author Michale
 * @apiNote 在线用户 服务层
 */
@Api(tags = "在线用户-服务类")
public interface UserOnlineService {

    /**
     * 通过登录地址查询信息
     *
     * @param ipAddress 登录地址
     * @param loginUserDetail   用户信息
     * @return 在线用户信息
     */
    UserOnlineEntity selectOnlineByIpAddress(String ipAddress, LoginUserDetail loginUserDetail);

    /**
     * 通过用户名称查询信息
     *
     * @param userName 用户名称
     * @param loginUserDetail     用户信息
     * @return 在线用户信息
     */
    UserOnlineEntity selectOnlineByUserName(String userName, LoginUserDetail loginUserDetail);

    /**
     * 通过登录地址/用户名称查询信息
     *
     * @param ipAddress   登录地址
     * @param userName 用户名称
     * @param loginUserDetail     用户信息
     * @return 在线用户信息
     */
    UserOnlineEntity selectOnlineByInfo(String ipAddress, String userName, LoginUserDetail loginUserDetail);

    /**
     * 设置在线用户信息
     *
     * @param loginUserDetail 用户信息
     * @return 在线用户
     */
    UserOnlineEntity loginUserToUserOnline(LoginUserDetail loginUserDetail);

    /**
     * 查询-在线用户
     *
     * @param ipAddress IP地址
     * @param userName  用户名
     * @return 在线用户列表
     */
    List<UserOnlineEntity> onlineList(String ipAddress, String userName);

    /**
     * 强制退出
     *
     * @param tokenId 会话ID
     */
    void forceLogout(String tokenId);
}
